#ifndef _IGAMEPLAY_H
#define _IGAMEPLAY_H

#include "Global Variables.h"
#include <string>
#include "CStateManager.h"

class CStateManager;

class IGamePlay
{
public:
	//----------------------------//
	//	Enumerator for this class //
	//----------------------------//
	enum GAME_SCREEN_RESOLUSION { GAME_SCREEN_RESOLUTION_640_480 = 0 , 
									GAME_SCREEN_RESOLUTION_800_600 = 1,
									GAME_SCREEN_RESOLUTION_1024_768 = 2 };

	
	//--------------------------------------------//
	//	Constructor and Destructor for this class //
	//--------------------------------------------//
	IGamePlay	();
	IGamePlay	(HINSTANCE hInstance , GAME_SCREEN_RESOLUSION Mode , bool IsFullScreen , int frameRate);
	~IGamePlay	();

	//-------------------------------//
	// Public methods for this class //
	//-------------------------------//
	bool		GameInit		();
	void		GameRun			();
	void		GameEnd			();

	void		Release			();

	//----------------------------------//
	//	Virtual methdos for Inheritance //
	//----------------------------------//
	virtual		void		Init		(){};
	virtual		void		Update		(){};
	virtual		void		Render		(){};
	virtual		void		Destroy		(){};

	//-------------------------------//
	//	Static Method for this class //
	//-------------------------------//
	static		LRESULT	CALLBACK	WndProc				(HWND hwnd , UINT msg , WPARAM wParam , LPARAM lParam );

	//------------------------------------//
	//	Public window proc for this class //
	//------------------------------------//
	virtual		LRESULT				DisplayWndProc		(HWND hwnd , UINT msg , WPARAM wParam , LPARAM lParam );


	//----------------------------------//
	//	Public Variables for this class //
	//----------------------------------//
	CGraphic		*m_Graphic;
	CTimer			*m_Timer;
	CInput			*m_Input;
	CStateManager	*m_StateManager;

protected:
	//-------------------------------------//
	//	Protected variables for this class //
	//-------------------------------------//
	HWND							m_hWnd;
	HINSTANCE						m_hInstance;
	GAME_SCREEN_RESOLUSION			m_Mode;
	bool							m_IsFullScreen;

	//-----------------------------------//
	//	Protected methods for this class //
	//-----------------------------------//
	bool		InitWindow();
	void		SetScreenDimension();
};

#endif